#include <iostream>
#include <set>
#include <unordered_map>
using namespace std;

// 已知
int n, m;
// 用一个map存图
unordered_map<int, set<int>> s;
// 未知
int cnt = 0;

int main()
{
    cin >> n >> m;
    for (int i = 0; i < m; i++)
    {
        int a, b;
        cin >> a >> b; // 输入起点和终点
        if (a > b) swap(a, b); // 如果起点大于终点就交换
        if (a != b) s[a].insert(b);// 如果起点不等于终点，那就a的set里插入b，表示有一条从a到b的边
    }
    for (auto i : s) // 遍历所有顶点
    {
        cnt += i.second.size(); // 边数就是每个顶点的set的大小
    }
    cout << m - cnt << endl; // 输出要删除的边数
    return 0;
}